================== Task Control Block ================== .. code-block:: c // ///******************************************************************************************************* // TASK CONTROL BLOCK ///******************************************************************************************************* /// typedef struct os_tcb { OS_STK *OSTCBStkPtr; // Pointer to current top of stack #if OS_TASK_CREATE_EXT_EN > 0 void *OSTCBExtPtr; // Pointer to user definable data for TCB extension OS_STK *OSTCBStkBottom; // Pointer to bottom of stack INT32U OSTCBStkSize; // Size of task stack (in number of stack elements) INT16U OSTCBOpt; // Task options as passed by OSTaskCreateExt() INT16U OSTCBId; // Task ID (0..65535) #endif // // Links connecting TCB's into a TCB list // struct os_tcb *OSTCBNext; // Pointer to next TCB in the TCB list struct os_tcb *OSTCBPrev; // Pointer to previous TCB in the TCB list #if OS_EVENT_EN || (OS_FLAG_EN > 0) OS_EVENT *OSTCBEventPtr; // Pointer to event control block #endif #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) void *OSTCBMsg; // Message received from OSMboxPost() or OSQPost() #endif #if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) #if OS_TASK_DEL_EN > 0 OS_FLAG_NODE *OSTCBFlagNode; // Pointer to event flag node #endif OS_FLAGS OSTCBFlagsRdy; // Event flags that made task ready to run #endif INT16U OSTCBDly; // Nbr ticks to delay task or, timeout waiting for event INT8U OSTCBStat; // Task status INT8U OSTCBStatPend; // Task PEND status INT8U OSTCBPrio; // Task priority (0 == highest) INT8U OSTCBX; // Bit position in group corresponding to task priority INT8U OSTCBY; // Index into ready table corresponding to task priority #if OS_LOWEST_PRIO <= 63 INT8U OSTCBBitX; // Bit mask to access bit position in ready table INT8U OSTCBBitY; // Bit mask to access bit position in ready group #else INT16U OSTCBBitX; // Bit mask to access bit position in ready table INT16U OSTCBBitY; // Bit mask to access bit position in ready group #endif #if OS_TASK_DEL_EN > 0 INT8U OSTCBDelReq; // Indicates whether a task needs to delete itself #endif #if OS_TASK_PROFILE_EN > 0 INT32U OSTCBCtxSwCtr; // Number of time the task was switched in INT32U OSTCBCyclesTot; // Total number of clock cycles the task has been running INT32U OSTCBCyclesStart; // Snapshot of cycle counter at start of task resumption OS_STK *OSTCBStkBase; // Pointer to the beginning of the task stack INT32U OSTCBStkUsed; // Number of bytes used from the stack #endif #if OS_TASK_NAME_SIZE > 1 INT8U OSTCBTaskName[OS_TASK_NAME_SIZE]; #endif } OS_TCB;